home *** CD-ROM | disk | FTP | other *** search
- class SideScroller.Layer extends Library.DispatcherBase
- {
- var mcRef;
- var oSSInstance;
- var nLayerType;
- var nAttachMethod;
- var oLayerID;
- var nNextPanelDepth;
- var nNextObjectDepth;
- var nNextRemoveDepth;
- var nNextFrontDepth;
- var nParalaxRatioX;
- var nParalaxRatioY;
- var nOverLap;
- var bFirstPanel;
- var aPanelsLinkages;
- var aPanelsVisual;
- var aObjects;
- var nFloorHeight;
- static var TYPE_STATIC = 1;
- static var TYPE_MOVING = 2;
- static var METHOD_ORDERED = 1;
- static var METHOD_RANDOM = 2;
- static var DEPTH_PANEL_MIN = 1;
- static var DEPTH_PANEL_MAX = 50000;
- static var DEPTH_OBJECT_MIN = 1;
- static var DEPTH_OBJECT_MAX = 50000;
- static var DEPTH_FRONT_MIN = 55000;
- static var DEPTH_FRONT_MAX = 75000;
- static var DEPTH_REMOVE_MIN = 100000;
- static var DEPTH_REMOVE_MAX = 110000;
- static var GROUND_CHECK_MODIFIER = 50;
- static var MAX_HEIGHT = 400;
- function Layer(__oLayerID, __mcRef, __nLayerType, __nAttachMethod, __oSSInstance)
- {
- super();
- this.mcRef = __mcRef;
- this.oSSInstance = __oSSInstance;
- this.mcRef.createEmptyMovieClip("mcPanels",1);
- this.mcRef.createEmptyMovieClip("mcObjects",2);
- this.mcRef.mcPanels.lineStyle(0,0,0);
- this.mcRef.mcPanels.lineTo(1,1);
- this.mcRef.mcObjects.lineStyle(0,0,0);
- this.mcRef.mcObjects.lineTo(1,1);
- this.nLayerType = __nLayerType;
- this.nAttachMethod = __nAttachMethod;
- this.oLayerID = __oLayerID;
- this.nNextPanelDepth = SideScroller.Layer.DEPTH_PANEL_MIN;
- this.nNextObjectDepth = SideScroller.Layer.DEPTH_OBJECT_MIN;
- this.nNextRemoveDepth = SideScroller.Layer.DEPTH_REMOVE_MIN;
- this.nNextFrontDepth = SideScroller.Layer.DEPTH_FRONT_MIN;
- if(this.nLayerType == SideScroller.Layer.TYPE_STATIC)
- {
- this.nParalaxRatioX = 0;
- this.nParalaxRatioY = 0;
- }
- else
- {
- this.nParalaxRatioX = 1;
- this.nParalaxRatioY = 1;
- }
- this.nOverLap = 0;
- this.bFirstPanel = true;
- this.aPanelsLinkages = new Array();
- this.aPanelsVisual = new Array();
- this.aObjects = new Array();
- this.nFloorHeight = Infinity;
- this.oSSInstance.doAddListener(this);
- }
- function doEnterFrame()
- {
- super.doEnterFrame();
- if(this.nLayerType == SideScroller.Layer.TYPE_MOVING)
- {
- this.doCheckLooping();
- }
- }
- function setOverlap(__n)
- {
- this.nOverLap = __n;
- }
- function doAddPanelLinkage(sLinkage)
- {
- this.aPanelsLinkages.push(sLinkage);
- if(this.bFirstPanel)
- {
- this.doAddPanel();
- this.bFirstPanel = false;
- }
- }
- function doAddPanelLinkageSet(aPanelsLinkagesLinkage)
- {
- var _loc2_ = undefined;
- _loc2_ = 0;
- while(_loc2_ <= aPanelsLinkagesLinkage.length - 1)
- {
- this.doAddPanelLinkage(aPanelsLinkagesLinkage[_loc2_]);
- _loc2_ = _loc2_ + 1;
- }
- }
- function doAttachVisual(__sLinkage)
- {
- do
- {
- this.nNextObjectDepth = this.nNextObjectDepth + 1;
- if(this.nNextObjectDepth > SideScroller.Layer.DEPTH_FRONT_MAX)
- {
- this.nNextObjectDepth = SideScroller.Layer.DEPTH_FRONT_MIN;
- }
- }
- while(this.mcRef.mcObjects.getInstanceAtDepth(this.nNextObjectDepth) != undefined);
-
- var _loc2_ = this.mcRef.mcObjects.attachMovie(__sLinkage,"mcObject_" + __sLinkage + "_" + this.nNextObjectDepth,this.nNextObjectDepth);
- return _loc2_;
- }
- function doPutInFront(__mc)
- {
- do
- {
- this.nNextFrontDepth = this.nNextFrontDepth + 1;
- if(this.nNextFrontDepth > SideScroller.Layer.DEPTH_FRONT_MAX)
- {
- this.nNextFrontDepth = SideScroller.Layer.DEPTH_FRONT_MIN;
- }
- }
- while(__mc._parent.getInstanceAtDepth(this.nNextFrontDepth) != undefined);
-
- __mc.swapDepths(this.nNextFrontDepth);
- }
- function doAddObject(__oObject)
- {
- this.aObjects.push(__oObject);
- }
- function doRemoveObject(__oObject)
- {
- if(this.aObjects.length > 0)
- {
- for(var _loc3_ in this.aObjects)
- {
- if(this.aObjects[_loc3_] == __oObject)
- {
- delete this.aObjects[_loc3_];
- this.aObjects.splice(Number(_loc3_),1);
- }
- }
- }
- }
- function getCollidableObjects(__oRequester)
- {
- var _loc9_ = new Array();
- var _loc7_ = __oRequester.Coord;
- var _loc3_ = undefined;
- _loc3_ = 0;
- while(_loc3_ <= this.aObjects.length - 1)
- {
- if(this.aObjects[_loc3_] != __oRequester)
- {
- var _loc2_ = this.aObjects[_loc3_];
- if(_loc2_.Hitable && _loc2_.ObjectBlock)
- {
- var _loc4_ = _loc2_.Coord;
- var _loc5_ = Library.Utils.MoreMath.getDistance(_loc4_.x,_loc4_.y,_loc7_.x,_loc7_.y);
- var _loc6_ = _loc2_.HitDistance + __oRequester.HitDistance;
- if(Math.abs(_loc5_) <= _loc6_)
- {
- _loc9_.push(_loc2_);
- }
- }
- }
- _loc3_ = _loc3_ + 1;
- }
- return _loc9_;
- }
- function getGroundObjects(__oRequester)
- {
- var _loc4_ = new Array();
- var _loc2_ = undefined;
- _loc2_ = 0;
- while(_loc2_ <= this.aObjects.length - 1)
- {
- if(this.aObjects[_loc2_] != __oRequester)
- {
- var _loc3_ = this.aObjects[_loc2_];
- if(_loc3_.GroundModifier)
- {
- _loc4_.push(_loc3_);
- }
- }
- _loc2_ = _loc2_ + 1;
- }
- return _loc4_;
- }
- function getSpecialObjects(__oRequester)
- {
- var _loc9_ = new Array();
- var _loc7_ = __oRequester.Coord;
- var _loc3_ = undefined;
- _loc3_ = 0;
- while(_loc3_ <= this.aObjects.length - 1)
- {
- if(this.aObjects[_loc3_] != __oRequester)
- {
- var _loc2_ = this.aObjects[_loc3_];
- if(_loc2_.Hitable && _loc2_.ObjectSpecial)
- {
- var _loc4_ = _loc2_.Coord;
- var _loc5_ = Library.Utils.MoreMath.getDistance(_loc4_.x,_loc4_.y,_loc7_.x,_loc7_.y);
- var _loc6_ = _loc2_.HitDistance + __oRequester.HitDistance;
- if(Math.abs(_loc5_) <= _loc6_)
- {
- _loc9_.push(_loc2_);
- }
- }
- }
- _loc3_ = _loc3_ + 1;
- }
- return _loc9_;
- }
- function getFloorAt(__nPositionX, __nPositionY, __oRequester)
- {
- var _loc5_ = this.nFloorHeight;
- var _loc7_ = new Array();
- var _loc10_ = this.getGroundObjects(SideScroller.BasicObject(__oRequester));
- var _loc2_ = undefined;
- _loc2_ = 0;
- while(_loc2_ <= _loc10_.length - 1)
- {
- var _loc6_ = _loc10_[_loc2_].GroundObject;
- if(_loc6_.StartPos <= __nPositionX && _loc6_.EndPos >= __nPositionX)
- {
- if(_loc6_ instanceof SideScroller.Ground)
- {
- var _loc4_ = _loc6_.getGroundAt(__nPositionX);
- var _loc3_ = true;
- if(_loc4_ > _loc5_)
- {
- _loc3_ = false;
- }
- else if(__oRequester.Speeds.y < 0)
- {
- _loc3_ = false;
- }
- else if(_loc4_ < __nPositionY - __oRequester.CliffClimbCapacity - __oRequester.Speeds.y)
- {
- _loc3_ = false;
- }
- if(_loc3_)
- {
- _loc5_ = _loc4_;
- }
- }
- else if(_loc6_ instanceof SideScroller.NegativeGround)
- {
- _loc7_.push(_loc6_);
- }
- }
- _loc2_ = _loc2_ + 1;
- }
- if(_loc5_ == this.nFloorHeight)
- {
- _loc2_ = 0;
- while(_loc2_ <= _loc7_.length - 1)
- {
- _loc6_ = _loc7_[_loc2_];
- if(_loc6_.getGroundAt() > _loc5_)
- {
- _loc5_ = _loc6_.getGroundAt();
- }
- _loc2_ = _loc2_ + 1;
- }
- }
- return _loc5_;
- }
- function doMoveTo(__nX, __nY)
- {
- this.mcRef._x = __nX * this.nParalaxRatioX;
- this.mcRef._y = __nY * this.nParalaxRatioY;
- }
- function getRemoveDepth(__mc)
- {
- do
- {
- this.nNextRemoveDepth = this.nNextRemoveDepth + 1;
- if(this.nNextRemoveDepth > SideScroller.Layer.DEPTH_REMOVE_MAX)
- {
- this.nNextRemoveDepth = SideScroller.Layer.DEPTH_REMOVE_MIN;
- }
- }
- while(__mc._parent.getInstanceAtDepth(this.nNextRemoveDepth) != undefined);
-
- return this.nNextRemoveDepth;
- }
- function doDestroy()
- {
- this.oSSInstance.doRemoveListener(this);
- for(var _loc3_ in this.aPanelsVisual)
- {
- this.doRemoveObjectsIn(this.aPanelsVisual[_loc3_]);
- }
- for(_loc3_ in this.aObjects)
- {
- this.aObjects[_loc3_].doDestroy();
- }
- delete this.aPanelsVisual;
- delete this.aObjects;
- delete this.oSSInstance;
- this.mcRef.swapDepths(this.getRemoveDepth(this.mcRef));
- this.mcRef.removeMovieClip();
- delete this.mcRef;
- super.doDestroy();
- }
- function get AllObjects()
- {
- return Library.Utils.Tools.doCopyArray(this.aObjects);
- }
- function get Id()
- {
- return this.oLayerID;
- }
- function get PanelsWidth()
- {
- return this.mcRef.mcPanels._width;
- }
- function get PanelsHeight()
- {
- return Math.min(this.mcRef.mcPanels._height,SideScroller.Layer.MAX_HEIGHT);
- }
- function get PanelsRef()
- {
- return this.Ref.mcPanels;
- }
- function get Ref()
- {
- return this.mcRef;
- }
- function set ParalaxRatioX(__nParalaxRatioX)
- {
- this.nParalaxRatioX = __nParalaxRatioX;
- }
- function set ParalaxRatioY(__nParalaxRatioY)
- {
- this.nParalaxRatioY = __nParalaxRatioY;
- }
- function set BaseFloor(__nFloorHeight)
- {
- this.nFloorHeight = __nFloorHeight;
- }
- function doCheckLooping()
- {
- var _loc2_ = this.PanelsWidth + this.mcRef._x;
- if(_loc2_ <= this.oSSInstance.StageWidth + SideScroller.SideScrollerManager.LOOP_BUFFER)
- {
- this.doAddPanel(this.PanelsWidth);
- }
- this.doCheckForPanelRemoval();
- }
- function doAddPanel(__nPosition)
- {
- var _loc3_ = undefined;
- var _loc2_ = undefined;
- switch(this.nAttachMethod)
- {
- case SideScroller.Layer.METHOD_ORDERED:
- if(this.aPanelsLinkages.length > 0)
- {
- _loc3_ = String(this.aPanelsLinkages.shift());
- _loc2_ = true;
- }
- else
- {
- _loc2_ = false;
- }
- break;
- case SideScroller.Layer.METHOD_RANDOM:
- var _loc5_ = Library.Utils.MoreMath.getRandomRange(0,this.aPanelsLinkages.length - 1);
- _loc3_ = this.aPanelsLinkages[_loc5_];
- _loc2_ = true;
- }
- if(_loc2_)
- {
- var _loc4_ = this.mcRef.mcPanels.attachMovie(_loc3_,"mcPanel" + this.nNextPanelDepth,this.nNextPanelDepth);
- _loc4_._x = __nPosition - this.nOverLap;
- this.aPanelsVisual.push(_loc4_);
- this.nNextPanelDepth = this.nNextPanelDepth + 1;
- if(this.nNextPanelDepth > SideScroller.Layer.DEPTH_PANEL_MAX)
- {
- this.nNextPanelDepth = SideScroller.Layer.DEPTH_PANEL_MIN;
- }
- }
- }
- function doRemoveObjectsIn(__mcContainer)
- {
- var _loc2_ = undefined;
- for(_loc2_ in this.aObjects)
- {
- if(String(this.aObjects[_loc2_].Ref).indexOf(String(__mcContainer)) != -1)
- {
- this.aObjects[_loc2_].doDestroy();
- }
- }
- }
- function doCheckForPanelRemoval()
- {
- var _loc2_ = this.aPanelsVisual[0];
- var _loc3_ = undefined;
- _loc3_ = _loc2_._x + _loc2_._width + this.mcRef._x;
- if(_loc3_ < - SideScroller.SideScrollerManager.LOOP_BUFFER)
- {
- this.doRemoveObjectsIn(_loc2_);
- _loc2_.removeMovieClip();
- this.aPanelsVisual.shift();
- }
- }
- }
-